fn main() {
	// a rune represents a single Unicode character and is an alias for u32
	// to denote them, use `(backticks)
	rocket := `🚀`
	
	// a rune can be converted to a UTF-8 string
	assert rocket.str() == '🚀'
	
	// a rune can be converted to a UTF-8 bytes
	assert rocket.bytes() == [u8(0xf0), 0x9f, 0x9a, 0x80]
	
	// hex, Unicode, and octal escape sequences also work in a rune literal	
	assert `\x61` == `a`
	assert `\141` == `a`
	assert `\u0061` == `a`

	// multibyte literals work too
	assert `\u2605` == `★`
	assert `\u2605`.bytes() == [u8(0xe2), 0x98, 0x85]
	assert `\xe2\x98\x85`.bytes() == [u8(0xe2), 0x98, 0x85]
	assert `\342\230\205`.bytes() == [u8(0xe2), 0x98, 0x85]
	
	// rune literals use the same escape syntax as strings
	// but they can only hold one unicode character
	
	// strings are indexed as bytes, not runes
	rocket_string := '🚀'
	assert rocket_string[0] != `🚀`
	assert 'aloha!'[0] == `a`

	// a string can be converted to runes
	hello := 'Hello World 👋'
	hello_runes := hello.runes() // [`H`, `e`, `l`, `l`, `o`, ` `, `W`, `o`, `r`, `l`, `d`, ` `, `👋`]
	assert hello_runes.string() == hello
}
